import path from 'path'
/**
 * 返回所有子路由
 */
 const getChildrenRoutes = routes => {
  let result = []
  routes.forEach(route=>{
    if(route.children && route.children.length>0){
      result.push(...route.children)
    }
  })
  return result
 }
 /**
 * 处理脱离层级的路由：某个一级路由为其他子路由，则剔除该一级路由，保留路由层级
 */
export const filterRouters = routes => {
  const childrenRoutes = getChildrenRoutes(routes)
  return routes.filter(route =>{
    return !childrenRoutes.find(childrenRoute=>{
      return childrenRoute.path == route.path
    })
  })
}
/**
 * 判断数据是否为空值
 */
function isNull(data){
  if(!data) return true
  if(JSON.stringify(data) === '{}') return true
  if(JSON.stringify(data) === '[]') return true
}
/**
 * 根据 routes 数据，返回对应 menu 规则数组
 */
 export function generateMenus(routes, basePath = '') {
  let result = []
  routes.forEach(item=>{
    // 没有children也没有meta 直接返回
    if(isNull(item.children) && isNull(item.meta)) return
    // 有children 没有meta 进行迭代操作
    if(!isNull(item.children) && isNull(item.meta)){
      result.push(...generateMenus(item.children))
      return
    }
    // 合并 path 作为跳转路径
    const routePath = path.resolve(basePath, item.path)
    // 路由分离之后，存在同名父路由的情况，需要单独处理
    let route = result.find(item => item.path === routePath)
    if(!route){
      route = {
        ...item,
      path:routePath,
      children: []
      }
       // icon 与 title 需要同时存在
       if(route.meta.icon && route.meta.title){
         // meta 存在生成 route 对象，放入 arr
         result.push(route)
       }
       
    }
    // 存在 children 进入迭代到children
    if (item.children) {
      route.children.push(...generateMenus(item.children, route.path))
    }
  })
  return result
 }